package com.zonta.finance.serivce;


import com.baomidou.mybatisplus.extension.service.IService;
import com.zonta.finance.common.dto.PageInfo;
import com.zonta.finance.domain.form.*;
import com.zonta.finance.domain.po.SysRole;
import com.zonta.finance.domain.vo.GetRoleDetailVo;
import com.zonta.finance.domain.vo.ListRoleVo;
import com.zonta.finance.domain.vo.MenuDataItemVo;

import java.util.List;

/**
 * <p>
 * 系统角色 服务类
 * </p>
 *
 * @author zonta
 * @since 2024-07-25
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * 新增角色
     * @param form
     * @return
     */
    Boolean createByFrom(CreateSysRoleForm form);

    /**
     * 查询角色 （条件）
     * @param form
     * @return
     */
    PageInfo<ListRoleVo> ListByFrom(ListRoleForm form);

    /**
     * 删除角色
     * @param id 角色id
     * @return
     */
    Boolean del(Integer id);

    /**
     * 禁用或者启用角色
     * @param form
     * @return
     */
    Boolean updateDisable(UpdateRoleDisableForm form);


    /**
     * 修改角色
     * @param form
     * @return
     */
    Boolean updateByFrom(UpdateRoleForm form);

    /**
     * 查询单个角色信息
     * @param id 角色id
     * @return
     */
    GetRoleDetailVo getGetRoleDetailVoById(Integer id);


    /**
     * 获取当前角色菜单
     *
     * @return
     */
     List<MenuDataItemVo> listRoleBindMenu();

    Boolean roleBindMenu(RoleBindMenuForm form);

    /**
     * 将所有角色绑定的资源设置到缓存中(通过定时任务触发)
     */
    void setSysRoleMenuCache();


    /**
     * 将所有角色绑定的资源设置到缓存中(通过定时任务触发)
     */
    void setSysRoleResourceCache();

    void deleteSysRoleMenuCache(int roleId);
    void updateSysRoleMenuCache(int roleId, List<MenuDataItemVo> menuDataItemVos);

    Boolean roleBindResource(RoleBindResourceForm form);
}
